{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "1b71c9ae",
   "metadata": {
    "lines_to_next_cell": 0
   },
   "source": [
    "#  15\\.  高斯分布函数实现及绘图  # \n",
    "\n",
    "##  15.1.  介绍  # \n",
    "\n",
    "朴素贝叶斯实验中提到了高斯分布，本次挑战通过 Python 实现高斯分布函数，并使用 Matplotlib 绘制不同参数下的高斯分布图像。 \n",
    "\n",
    "##  15.2.  知识点  # \n",
    "\n",
    "  * 高斯分布公式 \n",
    "\n",
    "  * 高斯分布函数 \n",
    "\n",
    "##  15.3.  高斯分布公式  # \n",
    "\n",
    "在朴素贝叶斯的实验中，我们知道可以依照特征数据类型，在计算先验概率时对朴素贝叶斯模型进行划分，并分为：多项式模型，伯努利模型和高斯模型。而在前面的实验中，我们使用了多项式模型来完成。 \n",
    "\n",
    "很多时候，当我们的特征是连续变量时，运用多项式模型的效果不好。所以，我们通常会采用高斯模型对连续变量进行处理，而高斯模型实际上就是假设连续变量的特征数据是服从高斯分布。其中，高斯分布函数表达式为： \n",
    "\n",
    "$$ P=\\frac{1}{\\sqrt{2\\pi}\\sigma}exp(-\\frac{(x-\\mu) ^{2}}{2\\sigma ^{2}}) \\tag{1} $$ \n",
    "\n",
    "其中  $\\mu$  为均值，  $\\sigma$  为标准差。 \n",
    "\n",
    "Exercise 15.1 \n",
    "\n",
    "挑战：参考高斯分布公式，使用 Python 实现高斯分布函数。 "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "cda9a087",
   "metadata": {},
   "outputs": [],
   "source": [
    "\"\"\"实现高斯分布函数\n",
    "\"\"\"\n",
    "import numpy as np\n",
    "\n",
    "def Gaussian(x, u, d):\n",
    "    \"\"\"\n",
    "    参数:\n",
    "    x -- 变量\n",
    "    u -- 均值\n",
    "    d -- 标准差\n",
    "\n",
    "    返回:\n",
    "    p -- 高斯分布值\n",
    "    \"\"\"\n",
    "    ### 代码开始 ### (≈ 3~5 行代码)\n",
    "    p = None\n",
    "\n",
    "    return p\n",
    "    ### 代码结束 ###"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2c01e8f6",
   "metadata": {
    "lines_to_next_cell": 0
   },
   "source": [
    "参考答案  Exercise 15.1 "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "648ee66c",
   "metadata": {},
   "outputs": [],
   "source": [
    "\"\"\"实现高斯分布函数\n",
    "\"\"\"\n",
    "import numpy as np\n",
    "\n",
    "def Gaussian(x, u, d):\n",
    "    \"\"\"\n",
    "    参数:\n",
    "    x -- 变量\n",
    "    u -- 均值\n",
    "    d -- 标准差\n",
    "\n",
    "    返回:\n",
    "    p -- 高斯分布值\n",
    "    \"\"\"\n",
    "    ### 代码开始 ### (≈ 3~5 行代码)\n",
    "    d_2 = d * d * 2\n",
    "    zhishu = -(np.square(x - u) / d_2)\n",
    "    exp = np.exp(zhishu)\n",
    "    pi = np.pi\n",
    "    xishu = 1 / (np.sqrt(2 * pi) * d)\n",
    "    p = xishu * exp\n",
    "    return p\n",
    "    ### 代码结束 ###"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "764a91b6",
   "metadata": {
    "lines_to_next_cell": 0
   },
   "source": [
    "运行测试 "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "9fcad5e4",
   "metadata": {},
   "outputs": [],
   "source": [
    "x = np.linspace(-5, 5, 100)\n",
    "u = 3.2\n",
    "d = 5.5\n",
    "g = Gaussian(x, u, d)\n",
    "\n",
    "len(g), g[10]"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9c1bcab0",
   "metadata": {},
   "source": [
    "期望输出 \n",
    "\n",
    "` (100,  0.030864654760573856)  `\n",
    "\n",
    "实现高斯分布函数之后，我们可以使用 Matplotlib 绘制出不同参数下的高斯分布图像。 \n",
    "\n",
    "Exercise 15.2 \n",
    "\n",
    "挑战：按规定的参数绘制高斯分布图像。 \n",
    "\n",
    "规定： \n",
    "\n",
    "  * 绘制 4 组高斯分布线形图像，  $\\mu$  和  $\\sigma$  分别为： ` (0,  1),  (-1,  2),  (1,  0.5),  (0.5,  5)  ` 。 \n",
    "\n",
    "  * 4 组高斯分布图像的线形颜色分别为红色、蓝色、绿色、黄色。 \n",
    "\n",
    "  * 绘制图例，并以  $u=\\sigma$  样式呈现。 "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "8f6efad4",
   "metadata": {},
   "outputs": [],
   "source": [
    "from matplotlib import pyplot as plt\n",
    "\n",
    "%matplotlib inline\n",
    "\n",
    "## 代码开始 ### (≈ 5~10 行代码)\n",
    "\n",
    "## 代码结束 ###"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b83fa829",
   "metadata": {
    "lines_to_next_cell": 0
   },
   "source": [
    "参考答案  Exercise 15.2 "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "267c236d",
   "metadata": {},
   "outputs": [],
   "source": [
    "from matplotlib import pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "### 代码开始 ### (≈ 5~10 行代码)\n",
    "y_1 = Gaussian(x, 0, 1)\n",
    "y_2 = Gaussian(x, -1, 2)\n",
    "y_3 = Gaussian(x, 1, 0.5)\n",
    "y_4 = Gaussian(x, 0.5, 5)\n",
    "\n",
    "plt.figure(figsize=(8,5))\n",
    "plt.plot(x, y_1, c='r', label=\"u=0, d=1\")\n",
    "plt.plot(x, y_2, c='b', label=\"u=-1, d=2\")\n",
    "plt.plot(x, y_3, c='g', label=\"u=1, d=0.5\")\n",
    "plt.plot(x, y_4, c='y', label=\"u=0.5, d=5\")\n",
    "plt.legend()\n",
    "### 代码结束 ###"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "130ce0d0",
   "metadata": {},
   "source": [
    "期望输出 \n",
    "\n",
    "![image](https://cdn.aibydoing.com/aibydoing/images/document-uid214893labid6671timestamp1531710933817.png)"
   ]
  }
 ],
 "metadata": {
  "jupytext": {
   "cell_metadata_filter": "-all",
   "main_language": "python",
   "notebook_metadata_filter": "-all"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
